package pe.com.csi.pm.regexiv;

import java.util.ArrayList;
import java.util.List;

import pe.com.csi.pm.regexiv.ClickListView.ViewHolder;
import pe.com.csi.pm.regexiv.bean.ElementoVial;
import pe.com.csi.pm.regexiv.bean.Parametro;
import pe.com.csi.pm.regexiv.bean.Tramo;
import pe.com.csi.pm.regexiv.service.ElementoVialService;
import pe.com.csi.pm.regexiv.service.TramoService;
import pe.com.csi.pm.regexiv.util.Numero;
import pe.com.csi.pm.regexiv.util.UUtil;
import pe.com.csi.pm.regexiv.widget.MyEditText;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;

public class ListarElementos extends Activity {

	private Spinner cmbTipoElemento;
	private Spinner cmbTramos;
	private ImageButton btnRefrescar;
	private MyEditText txtPI;
	private MyEditText txtPF;

	private ElementoVialService elementovialService;
	private TramoService tramoService;
	private ListView lstOpciones;
	private List<ElementoVial> lstElementos;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		System.out.println("oncreate");
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
		setContentView(R.layout.lista_elementos);
		elementovialService = new ElementoVialService(getApplicationContext());
		tramoService = new TramoService(getApplicationContext());

		cmbTipoElemento = (Spinner) findViewById(R.id.cmbTipoelemento);
		cmbTramos = (Spinner) findViewById(R.id.cmbTramos);
		txtPI = (MyEditText) findViewById(R.id.txtPI);
		txtPF = (MyEditText) findViewById(R.id.txtPF);

		lstOpciones = (ListView) findViewById(R.id.lstElementosViales);
		btnRefrescar = (ImageButton) findViewById(R.id.btnRefrescar);

		cargarTramos();
		cargarTipoElemento(cmbTipoElemento, R.raw.tipo_elemento);
		cargarEventos();
	}

	private void cargarTramos() {
		List<Tramo> listaTramos = new ArrayList<Tramo>();
		Tramo t = new Tramo();
		t.setEtiqueta("TRAMOS");
		t.setIdTmo(0L);
		listaTramos.add(t);
		listaTramos.addAll(tramoService.obtenerTramos());
		ArrayAdapter<Tramo> adaptador = new ArrayAdapter<Tramo>(this, android.R.layout.simple_spinner_item, listaTramos);
		adaptador.setDropDownViewResource(android.R.layout.simple_spinner_item);
		cmbTramos.setAdapter(adaptador);
		cargarEventos();
	}

	private void cargarTipoElemento(Spinner cmb, int xml) {
		List<Parametro> lista = new ArrayList<Parametro>();
		lista.addAll(UUtil.obtenerParametrosEV(this, xml));

		ArrayAdapter<Parametro> adaptador = new ArrayAdapter<Parametro>(this, android.R.layout.simple_spinner_item, lista);
		adaptador.setDropDownViewResource(android.R.layout.simple_spinner_item);
		cmb.setAdapter(adaptador);
		cmb.setSelection(0);
	}

	private void cargarEventos() {
		btnRefrescar.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {
				// limpiarTabla();
				cargarTabla();
			}
		});

	}

	public void cargarTabla() {
		try {

			lstElementos = obtenerListaFiltros();
			System.out.println("lista " + lstElementos.size());
			lstOpciones.setAdapter(new MyClickableListAdapter(this, R.layout.item_elemento, lstElementos));

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	private List<ElementoVial> obtenerListaFiltros() {
		List<ElementoVial> lista = new ArrayList<ElementoVial>();
		try {
			Parametro itemtipo = (Parametro) cmbTipoElemento.getSelectedItem();
			Tramo t = (Tramo) cmbTramos.getSelectedItem();
			String i = (txtPI.getText() != null && txtPI.getText().toString() != null) ? txtPI.getText().toString().trim() : "";
			String f = (txtPF.getText() != null && txtPF.getText().toString() != null) ? txtPF.getText().toString().trim() : "";

			Double progresivaIniEven = i.length() > 0 ? Numero.parseStringToNUmero(i) : null;
			Double progresivaFinEven = f.length() > 0 ? Numero.parseStringToNUmero(f) : null;
			ElementoVial elemento = new ElementoVial();
			Long idTmo = null;
			Long idtipo = null;
			if (t != null) {
				idTmo = t.getIdTmo();
			}

			if (itemtipo != null) {
				idtipo = itemtipo.getKey().equalsIgnoreCase("0") ? null : Long.valueOf(itemtipo.getKey());

			}

			elemento.setIdTpoEv(idtipo);
			elemento.setIdTmo(idTmo);
			elemento.setProgresivaIniElev(progresivaIniEven);
			elemento.setProgresivaFinElev(progresivaFinEven);

			lista = elementovialService.listarElementos(elemento);

		} catch (Exception e) {
			e.printStackTrace();
		}
		return lista;
	}

	private class MyClickableListAdapter extends ClickListView {
		public MyClickableListAdapter(Context context, int viewid, List<ElementoVial> objects) {
			super(context, viewid, objects);
		}

		@Override
		protected void bindHolder(ViewHolder h) {
			try {
				MyViewHolder holder = (MyViewHolder) h;
				if (holder != null) {
					holder.itemtramo.setText("");
					holder.itemtipo.setText("");
					holder.itemprogI.setText("");
					holder.itemprogF.setText("");
					holder.itemlado.setText("");
					holder.itemclasf.setText("");
					//holder.itemdato1.setText("");

					ElementoVial ev = (ElementoVial) holder.data;
					if (ev != null) {

						holder.itemtramo.setText(ev.getTramo().getNombreTmo());
						holder.itemtipo.setText(ev.getTipo().getNombreTpoEV());
						holder.itemprogI.setText(Numero.parseNumeroToString(ev.getProgresivaIniElev()));
						holder.itemprogF.setText(Numero.parseNumeroToString(ev.getProgresivaFinElev()));
						holder.itemlado.setText(ev.getLadoelev());
						holder.itemclasf.setText(ev.getClasificacionelev());
						//holder.itemdato1.setText(ev.getValordin1elev());

					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		@Override
		protected ViewHolder createHolder(View v) {
			TextView itemtramo = (TextView) v.findViewById(R.id.itemTramo);
			TextView itemtipo = (TextView) v.findViewById(R.id.itemTipo);
			TextView itemprogI = (TextView) v.findViewById(R.id.itemProgresivaInicial);
			TextView itemprogF = (TextView) v.findViewById(R.id.itemProgresivaFinal);
			TextView itemlado = (TextView) v.findViewById(R.id.itemLado);
			TextView itemclasf = (TextView) v.findViewById(R.id.itemClasificacion);
			//TextView itemdato1 = (TextView) v.findViewById(R.id.itemdato1);

			ViewHolder holder = new MyViewHolder(itemtramo, itemtipo, itemprogI, itemprogF, itemlado, itemclasf);
			return holder;
		}
	}

	static class MyViewHolder extends ViewHolder {

		TextView itemtramo;
		TextView itemtipo;
		TextView itemprogI;
		TextView itemprogF;
		TextView itemlado;
		TextView itemclasf;
		//TextView itemdato1;

		public MyViewHolder(TextView itemtramo, TextView itemtipo, TextView itemprogI, TextView itemprogF, TextView itemlado, TextView itemclasf) {
			this.itemtramo = itemtramo;
			this.itemtipo = itemtipo;
			this.itemprogI = itemprogI;
			this.itemprogF = itemprogF;
			this.itemlado = itemlado;
			this.itemclasf = itemclasf;
			//this.itemdato1 = itemdato1;
		}

		public MyViewHolder() {

		}
	}
}